function init() {
  var loadingMask = Ext.get('loading-mask');
  var loading = Ext.get('loading');

  //Hide loading message
  loading.fadeOut({duration : 0.2,remove : true});

  //Hide loading mask
  loadingMask.setOpacity(0.9);
  loadingMask.shift({
     xy       : loading.getXY()
    ,width    : loading.getWidth()
    ,height   : loading.getHeight()
    ,remove   : true
    ,duration : 1
    ,opacity  : 0.1
    ,easing   : 'bounceOut'
  });

  Ext.QuickTips.init();

  new Ext.Window({
     width    : 400
    ,height   : 400
    ,closable : false
    ,x        : 0
    ,y        : 0
    ,title    : 'CSW facet search'
    ,renderTo : Ext.getBody()
    ,layout   : 'fit'
    ,defaults : {
       border     : false
      ,autoScroll : true
    }
    ,items    : new Ext.grid.GridPanel({
       store            : new Ext.data.JsonStore({
         proxy     : new Ext.data.HttpProxy({url : 'query.php?type=cswFacet',timeout : 120000})
        ,fields    : ['name','type','svc']
        ,root      : 'data'
        ,listeners : {beforeload : function(sto) {
          sto.setBaseParam('cswFacetModel',Ext.getCmp('cswFacetModelCheckbox').checked);
          sto.setBaseParam('cswFacetObservation',Ext.getCmp('cswFacetObservationCheckbox').checked);
        }}
        ,sortInfo  : {field : 'name',direction : 'ASC'}
      })
      ,autoExpandColumn : 'name'
      ,columns          : [
         new Ext.grid.RowNumberer()
        ,{id : 'name',dataIndex : 'name',header : 'Name',sortable : true                 ,renderer : rendererFullName}
        ,{id : 'type',dataIndex : 'type',header : 'Type',sortable : true,align : 'center',renderer : rendererFullName,width : 60}
      ]
      ,id               : 'cswFacetModObsGridPanel'
      ,loadMask         : true
    })
    ,tbar     : [
       'Model?'
      ,' '
      ,new Ext.form.Checkbox({
         checked : true
        ,id      : 'cswFacetModelCheckbox'
      })
      ,' '
      ,' '
      ,'Observation?'
      ,' '
      ,new Ext.form.Checkbox({
         checked : true
        ,id      : 'cswFacetObservationCheckbox'
      })
      ,'->'
      ,{
         text    : 'Clear'
        ,icon    : 'img/Delete-icon.png'
        ,handler : function() {Ext.getCmp('cswFacetModObsGridPanel').getStore().removeAll()}
      }
      ,{
         text    : 'Search'
        ,icon    : 'img/magnifier.png'
        ,handler : function() {Ext.getCmp('cswFacetModObsGridPanel').getStore().load()}
      }
    ]
  }).show();

  new Ext.Window({
     width    : 400
    ,height   : 400
    ,closable : false
    ,x        : 405
    ,y        : 0
    ,title    : 'CSW facet search'
    ,renderTo : Ext.getBody()
    ,layout   : 'fit'
    ,defaults : {
       border     : false
      ,autoScroll : true
    }
    ,items    : new Ext.grid.GridPanel({
       store            : new Ext.data.JsonStore({
         proxy     : new Ext.data.HttpProxy({url : 'query.php?type=cswFacet',timeout : 120000})
        ,fields    : ['name','type','svc']
        ,root      : 'data'
        ,listeners : {beforeload : function(sto) {
          sto.setBaseParam('cswFacetWMS',Ext.getCmp('cswFacetWMSCheckbox').checked);
          sto.setBaseParam('cswFacetSOS',Ext.getCmp('cswFacetSOSCheckbox').checked);
        }}
        ,sortInfo  : {field : 'name',direction : 'ASC'}
      })
      ,autoExpandColumn : 'name'
      ,columns          : [
         new Ext.grid.RowNumberer()
        ,{id : 'name',dataIndex : 'name',header : 'Name'      ,sortable : true                 ,renderer : rendererFullName}
        ,{id : 'svc' ,dataIndex : 'svc' ,header : 'Service(s)',sortable : true,align : 'center',renderer : rendererFullName}
      ]
      ,id               : 'cswFacetWSGridPanel'
      ,loadMask         : true
    })
    ,tbar     : [
       'WMS?'
      ,' '
      ,new Ext.form.Checkbox({
         checked : true
        ,id      : 'cswFacetWMSCheckbox'
      })
      ,' '
      ,' '
      ,'SOS?'
      ,' '
      ,new Ext.form.Checkbox({
         checked : true
        ,id      : 'cswFacetSOSCheckbox'
      })
      ,'->'
      ,{
         text    : 'Clear'
        ,icon    : 'img/Delete-icon.png'
        ,handler : function() {Ext.getCmp('cswFacetWSGridPanel').getStore().removeAll()}
      }
      ,{
         text    : 'Search'
        ,icon    : 'img/magnifier.png'
        ,handler : function() {Ext.getCmp('cswFacetWSGridPanel').getStore().load()}
      }
    ]
  }).show();

  new Ext.Window({
     width    : 400
    ,height   : 400
    ,closable : false
    ,x        : 0
    ,y        : 405
    ,title    : 'CSW anyText search'
    ,renderTo : Ext.getBody()
    ,layout   : 'fit'
    ,defaults : {
       border     : false
      ,autoScroll : true
    }
    ,items    : new Ext.grid.GridPanel({
       store            : new Ext.data.JsonStore({
         proxy     : new Ext.data.HttpProxy({url : 'query.php?type=cswAnyText',timeout : 120000})
        ,fields    : ['name','type','svc']
        ,root      : 'data'
        ,listeners : {beforeload : function(sto) {
          sto.setBaseParam('cswAnyText',Ext.getCmp('cswAnyText').getValue());
        }}
        ,sortInfo  : {field : 'name',direction : 'ASC'}
      })
      ,autoExpandColumn : 'name'
      ,columns          : [
         new Ext.grid.RowNumberer()
        ,{id : 'name',dataIndex : 'name',header : 'Name'      ,sortable : true                 ,renderer : rendererFullName}
        ,{id : 'type',dataIndex : 'type',header : 'Type'      ,sortable : true,align : 'center',renderer : rendererFullName,width : 60}
        ,{id : 'svc' ,dataIndex : 'svc' ,header : 'Service(s)',sortable : true,align : 'center',renderer : rendererFullName}
      ]
      ,id               : 'cswAnyTextGridPanel'
      ,loadMask         : true
    })
    ,tbar     : [
      {
         xtype     : 'textfield'
        ,id        : 'cswAnyText'
        ,width     : 250
        ,emptyText : 'Enter search term(s). Asterisk (*) = wild card.'
      }
      ,'->'
      ,{
         text    : 'Clear'
        ,icon    : 'img/Delete-icon.png'
        ,handler : function() {Ext.getCmp('cswAnyTextGridPanel').getStore().removeAll();Ext.getCmp('cswAnyText').reset()}
      }
      ,{
         text    : 'Search'
        ,icon    : 'img/magnifier.png'
        ,handler : function() {Ext.getCmp('cswAnyTextGridPanel').getStore().load()}
      }
    ]
  }).show();

  new Ext.Window({
     width    : 400
    ,height   : 400
    ,closable : false
    ,x        : 405
    ,y        : 405
    ,title    : 'OpenSearch'
    ,renderTo : Ext.getBody()
    ,layout   : 'fit'
    ,defaults : {
       border     : false
      ,autoScroll : true
    }
    ,items    : new Ext.grid.GridPanel({
       store            : new Ext.data.JsonStore({
         proxy     : new Ext.data.HttpProxy({url : 'query.php?type=openSearch',timeout : 120000})
        ,fields    : ['name','type']
        ,root      : 'data'
        ,listeners : {beforeload : function(sto) {
          sto.setBaseParam('openSearch',Ext.getCmp('openSearch').getValue());
        }}
        ,sortInfo  : {field : 'name',direction : 'ASC'}
      })
      ,autoExpandColumn : 'name'
      ,columns          : [
         new Ext.grid.RowNumberer()
        ,{id : 'name',dataIndex : 'name',header : 'Name',sortable : true}
      ]
      ,id               : 'openSearchGridPanel'
      ,loadMask         : true
    })
    ,tbar     : [
      {
         xtype     : 'textfield'
        ,id        : 'openSearch'
        ,width     : 250
        ,emptyText : 'Enter search term(s). AND and OR supported.'
      }
      ,'->'
      ,{
         text    : 'Clear'
        ,icon    : 'img/Delete-icon.png'
        ,handler : function() {Ext.getCmp('openSearchGridPanel').getStore().removeAll()}
      }
      ,{
         text    : 'Search'
        ,icon    : 'img/magnifier.png'
        ,handler : function() {Ext.getCmp('openSearchGridPanel').getStore().load()}
      }
    ]
  }).show();
}

function rendererFullName(val,metadata,rec) {
  metadata.attr = 'ext:qtip="' + val + '"';
  return val;
}

